package com.yunxi.module.system.mapper.dept;

import com.yunxi.framework.mybatis.core.mapper.BaseMapperX;
import com.yunxi.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yunxi.module.system.model.dept.DeptDO;
import com.yunxi.module.system.vo.admin.dept.dept.DeptListReqVO;
import org.apache.ibatis.annotations.Mapper;

import java.util.Collection;
import java.util.List;

/**
 * <p>
 * 部门 mapper 接口
 * </p>
 *
 * @author lidy
 * @since 2024-05-08
 */
@Mapper
public interface DeptMapper extends BaseMapperX<DeptDO> {

    /**
     * 根据父级 ID 查询部门集合
     *
     * @param parentIds 父级 ID
     * @return 部门集合
     */
    default List<DeptDO> selectListByParentId(Collection<Long> parentIds) {
        return selectList(DeptDO::getParentId, parentIds);
    }

    /**
     * 获得部门列表
     *
     * @param reqVO 查询条件
     * @return 部门列表
     */
    default List<DeptDO> selectList(DeptListReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<DeptDO>()
                .likeIfPresent(DeptDO::getName, reqVO.getName())
                .eqIfPresent(DeptDO::getStatus, reqVO.getStatus()));
    }

    /**
     * 根据父部门编号和部门名称查询部门信息
     *
     * @param parentId 父部门编号
     * @param name     部门名称
     * @return 部门信息
     */
    default DeptDO selectByParentIdAndName(Long parentId, String name) {
        return selectOne(DeptDO::getParentId, parentId, DeptDO::getName, name);
    }

    /**
     * 根据父部门编号查询数量
     *
     * @param parentId 父部门编号
     * @return 子部门数量
     */
    default Long selectCountByParentId(Long parentId) {
        return selectCount(DeptDO::getParentId, parentId);
    }
}
